/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package miselania.tiposgenericos;

/**
 *
 * @author Usuario
 */
public class ListaEnlazada <E>{
    
    protected E datos;
    protected ElemLista<E> primero;
    int tamaño = 0;
    
    public ListaEnlazada()
    {
        this.datos= null;
       this.primero=null;
    }
    //public ListaEnlazada(E datos, ElemLista<E> primero) {
    //    this.datos = datos;
    //    this.primero = primero;
    //}
    
    
    public void insertar(E y){
        ElemLista<E> nuevo = new ElemLista<E>(y);
            
        nuevo.siguiente=primero;        
        primero=nuevo;        
        this.tamaño++;
        
        
    }
    public void InsertarAlFinal(E y){
        ElemLista<E> n1 = new ElemLista<E>(y);
        this.tamaño++;
        ElemLista<E> aux = primero;
        if(aux==null)
        {
            primero=n1;
        }
        else{
            while(aux.siguiente != null)
            {
                aux=aux.siguiente;
                
                aux.siguiente=n1;
            }
        }
    }
    
    public boolean eliminar(E y){
        ElemLista<E> auxiliar = primero,anterior=null;
        boolean respuesta= false;
        while( auxiliar!= null && auxiliar.dato.equals(y)){
            anterior = auxiliar;
            auxiliar=auxiliar.siguiente;
        }
        if (auxiliar!= null){
            respuesta = true;
            this.tamaño--;
            if(anterior==null){
                //si se desea borrar el primer elemento
                primero=auxiliar.siguiente;
                
            }
            else{
                anterior.siguiente=auxiliar.siguiente;
            }
        }
        return respuesta;
    }
    
    @Override
    public String toString(){
        String respuesta="";
        for (ElemLista<E> b = primero; b != null ;b = b.siguiente)
            respuesta +=  b.dato.toString()+"\n";
        return respuesta;
    }
    
}
